package com.xygz.orm;

import com.xygz.orm.config.ORMConfig;
import com.xygz.orm.constants.ORMConstants;
import com.xygz.orm.exception.ORMException;

/**
 * SQL 构建器
 *
 * @author xiyuan-lgz 2023-10-01 @version v1.0.0 新建与整理
 */
@SuppressWarnings("all")
public interface SQLBuilder extends ORMConstants {
    
    /**
     * 生成 SQL 语句
     *
     * @param c                   查询器或者修改器
     * @return                    SQL 结果
     * @throws ORMException       异常信息
     */
    public <E, C extends ConditionWrapper<E, C>> SQLWrapper buildSQL(C c, ORMConfig cfg) throws ORMException;
    
    /**
     * 生成 SQL 语句
     *
     * @param c                   查询器或者修改器
     * @param out                 SQL 输出器
     * @return SQL                SQL结果
     * @throws ORMException       异常信息
     */
    public <E, C extends ConditionWrapper<E, C>> SQLWrapper buildSQL(SQLWrapper out, C c, ORMConfig cfg) throws ORMException;
    
    /**
     * 创建 删除SQL
     *
     * @param out                 sql 输出
     * @param q                   查询器
     * @param cfg                 数据库配置
     * @return sql                输出器
     * @throws ORMException       异常信息
     */
    public <E, Q extends Selector<E>> SQLWrapper toDeleteSQL(SQLWrapper out, Q q, ORMConfig cfg) throws ORMException;
}
